package com.example.algorithm.huawei_rongyao_29;
import java.util.Scanner;

// 求小球落地5次后所经历的路程和第5次反弹的高度

/**
 * 假设一个球从任意高度自由落下，每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时，共经历多少米?第5次反弹多高？
 *
 * 数据范围：输入的小球初始高度满足 1<=n<=1000,且保证是一个整数
 *
 * 输入描述:
 * 输入起始高度，int型
 *
 * 输出描述:
 * 分别输出第5次落地时，共经过多少米以及第5次反弹多高。
 * 注意：你可以认为你输出保留六位或以上小数的结果可以通过此题。
 *
 * 示例1
 * 输入
 * 1
 *
 * 输出
 * 2.875
 * 0.03125
 *
 * */
public class Q29_BallBounce {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入起始高度
        int height = scanner.nextInt();

        if (height <= 0) {
            System.out.println("起始高度必须为正整数！");
            return;
        }

        double totalDistance = 0;
        double currentHeight = height;
        double bounceHeight = height;

        for (int i = 1; i <= 5; i++) {
            // 落地
            totalDistance += currentHeight;
            // 反弹
            bounceHeight = currentHeight / 2;
            if (i < 5) {
                totalDistance += bounceHeight;
            }
            // 下一次的高度为这次反弹的高度
            currentHeight = bounceHeight;
        }
        System.out.printf("第5次落地时，总共经过%.6f米\n", totalDistance);
        System.out.printf("第5次反弹高度为%.6f米\n", bounceHeight);

        // 第5次落地时，总共经过多少
        System.out.println(Math.round(totalDistance*1000000.0)/1000000.0);
        // 第5次反弹高度为多少米
        System.out.println(Math.round(bounceHeight*1000000.0)/1000000.0);
    }
}

// 备注：java中的printf是什么意思
// 在 Java 中，printf 是一种格式化输出的方法，用于格式化打印输出内容。
// 它属于 PrintStream 类（例如 System.out 是 PrintStream 的实例），提供类似于 C 语言的 printf 方法。
// printf 方法可以方便地按照指定的格式打印文本。
// 基本语法：System.out.printf(format, arguments);
// format：一个字符串，包含文本和格式说明符（如 %d、%s、%f 等）。
// arguments：一组可选的参数，按顺序替换格式说明符。
// 常用的格式说明符
// %d：十进制整数。
// %f：浮点数。
// %s：字符串。
// %c：字符。
// %x：十六进制整数。
// %o：八进制整数。
// 示例：
// 打印浮点数。精度：对于浮点数，可以指定小数点后的位数，例如 %.2f 表示保留两位小数。
// 在 Java 的 printf 方法中，%n 是一个特殊的格式说明符，用于表示平台独立的换行符。这意味着在不同操作系统上，%n 会被替换为适当的换行符：
// 在 Unix 和 Linux 系统上，%n 会被替换为 \n。
// 在 Windows 系统上，%n 会被替换为 \r\n。
// 使用 %n 可以确保您的输出在不同操作系统上都有正确的换行效果。
// System.out.printf("Floating point: %.2f%n", doubleValue);

